# 顶层目录Makefile
#
# 目的：
#	1、每个子目录都会建立一个Makefile，包含当前目录下.c文件.h文件
# 	2、顶层目录下


# 交叉编译工具链
CROSS_COMPILE = arm-linux-

# 定义一些变量 $(CROSS_COMPILE)：取出该变量的值 $(CROSS_COMPILE)gcc->arm-linux-gcc
AS		= $(CROSS_COMPILE)as		
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm

STRIP		= $(CROSS_COMPILE)strip
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump

# 取出变量的值
export 	AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMP

# := 		简单扩展型变量的值是一次扫描永远使用
# CFLAGS	方便您利用隐含规则指定编译C语言源程序的旗标
# -Wall 	帮助列出所有警告信息
# -02		多优化一些，除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作
# -g		可以认为它是缺省推荐的选项	
CFLAGS := -Wall -O2 -g

# 把当前目录下的include目录下指定为系统目录
# +=		为已经定以过的变量的值追加更多的文本
# -I		指定搜寻包含makefile文件的路径
# $(shell pwd)  执行shell命令的pwd命令，获取执行命令的结果
CFLAGS += -I $(shell pwd)/include

# LDFLAGS	用于调用linker（‘ld’）的编译器的额外标志
# -l		连接库的搜寻目录 -lm调用math库 -lfreetype调用freetype库
LDFLAGS := -lm -lfreetype -lts

# 取出变量的值
export 	CFLAGS LDFLAGS

TOPDIR := $(shell pwd)
export TOPDIR

# TARGET	目标变量
# := 		简单扩展型变量的值是一次扫描永远使使用
TARGET := show_file

obj-y += main.o
obj-y += display/
obj-y += draw/
obj-y += encoding/
obj-y += fonts/
obj-y += input/

# 规则		arm-linux-gcc -lm -lfreetype -o show_file built-in.o
all : 
	make -C ./ -f $(TOPDIR)/Makefile.build
	$(CC) $(LDFLAGS) -o $(TARGET) built-in.o
	
# clean 	删除所有make正常创建的文件
# 规则		找到所有make创建出来.o文件进行删除
#			删除show_file
clean :
	rm -f $(shell find -name "*.o")
	rm -f $(TARGET)
	
# distclean 删除所有正常创建的文件
#			配置文件或为编译正常创建的准备文件，甚至makefile文件自身不能创建的文件
# 规则		找到所有mkae创建出来的.o文件进行删除
#			删除show_file
distclean:
	rm -f $(shell find -name "*.o")
	rm -f $(shell find -name "*.d")
	rm -f $(TARGET)
